package com.kakame.codenews.base.thymeleaf.processor;

import org.apache.commons.lang3.StringUtils;
import org.thymeleaf.context.ITemplateContext;
import org.thymeleaf.model.IModel;
import org.thymeleaf.model.IModelFactory;
import org.thymeleaf.model.IProcessableElementTag;
import org.thymeleaf.processor.element.AbstractElementTagProcessor;
import org.thymeleaf.processor.element.IElementTagStructureHandler;
import org.thymeleaf.standard.StandardDialect;
import org.thymeleaf.templatemode.TemplateMode;

import com.kakame.codenews.base.util.DateUtil;
import com.kakame.codenews.base.util.RecentlyDateUtil;

public class RecentlyDateProcessor extends AbstractElementTagProcessor {

    public RecentlyDateProcessor(String dialectPrefix, String tagName) {
        super(
                TemplateMode.HTML, // 此处理器将仅应用于HTML模式
                dialectPrefix,     // 要应用于名称的匹配前缀
                tagName,          // 标签名称：匹配此名称的特定标签
                true,              // 将标签前缀应用于标签名称
                null,              // 无属性名称：将通过标签名称匹配
                false,             // 没有要应用于属性名称的前缀
                StandardDialect.PROCESSOR_PRECEDENCE + 1);       // 优先(内部方言自己的优先)

    }

    /**
     * context 页面上下文 tag 标签
     * 
     */
    @Override
    protected void doProcess(final ITemplateContext context,
            final IProcessableElementTag tag,
            final IElementTagStructureHandler structureHandler) {
        /*
         * 从标签读取属性。标签中的这个可选属性将告诉我们需要什么样的数据
         */
        String time = tag.getAttributeValue("time");
        String formatTime = "";
        if(StringUtils.isNotBlank(time)) {
            formatTime = RecentlyDateUtil.format(DateUtil.parse(time, DateUtil.FORMAT2));
        }
        /*
         * 创建将替换自定义标签的DOM结构。
         */
        final IModelFactory modelFactory = context.getModelFactory();

        final IModel model = modelFactory.createModel();

//        model.add(modelFactory.createOpenElementTag("div"));
        model.add(modelFactory.createText(formatTime));
//        model.add(modelFactory.createCloseElementTag("div"));

        /*
         * 指示引擎用指定的模型替换整个元素。
         */
        structureHandler.replaceWith(model, false);

    }
}